package 牛客网在线编程题库;

import java.util.HashMap;

/**
 * 数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。如果不存在则输出0。
 * 示例1
 * 输入
 * [1,2,3,2,2,2,5,4,2]
 * 返回值
 * 2
 */

public class _数组中出现次数超过一半的数字 {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 2, 2, 2, 5, 4, 2};
        int target = MoreThanHalfNum_Solution(array);
        System.out.println(target);
    }

    public static int MoreThanHalfNum_Solution(int[] array) {
        // 定义哈希表，存储元素值和出现的次数
        HashMap<Integer, Integer> map = new HashMap<>();
        // 遍历
        for (int i = 0 ; i < array.length ; i++) {
            // 若重复
            if (map.containsKey(array[i])) {
                // 将出现次数+1再放入
                map.put(array[i], map.get(array[i]) + 1);
            }else {
                // 未出现过则直接加入，并标记为第一次
                map.put(array[i], 1);
            }
            // 校验出现次数，若符合条件直接返回
            if (map.get(array[i]) > array.length / 2) {
                return array[i];
            }
        }
        return 0;
    }
}
